package negocio;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import beans.CocinaVO;
import beans.PlatoVO;
import beans.TareaVO;

@Entity
@PrimaryKeyJoinColumn(name="id_cocina")
@Table(name="cocina")
public class Cocina extends Area
{
	private static final long serialVersionUID = 1L;
	
	@Column(name="tiempoSemielaborado" ,nullable=true)
	private int tiempoSemielaborado;
	
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
	@JoinColumn(name="id_cocina" , referencedColumnName="id_cocina")
	private List<Tarea> tareas= new ArrayList<>();
	
	public Cocina(){
		
	}
	
	public Cocina(Deposito depositoLocal){
		super("Cocina", depositoLocal);
	}
	
	
	public List<Tarea> getTareas() {
		return tareas;
	}
	public void setTareas(List<Tarea> tareas) {
		this.tareas = tareas;
	}
	public int getTiempoSemielaborado() {
		return tiempoSemielaborado;
	}
	public void setTiempoSemielaborado(int tiempoSemielaborado) {
		this.tiempoSemielaborado = tiempoSemielaborado;
	}
	
	public CocinaVO getVO()
	{
		CocinaVO cocinaVO = new CocinaVO();
		cocinaVO.setDeposito(getDepositoArea().getVO());
		
		ArrayList<PlatoVO> platosVOs = new ArrayList<PlatoVO>();
		for(Plato p : this.getPlatosPendientes())
		{
			PlatoVO platoVO=p.getVO();
			platosVOs.add(platoVO);
		}
		cocinaVO.setPlatosPendientes(platosVOs);
		
		cocinaVO.setTimepoSemielaborado(getTiempoSemielaborado());
		
		ArrayList<TareaVO> tareasVO = new ArrayList<TareaVO>();
		for (int i = 0 ; i < getTareas().size() ; i++)
		{
			tareasVO.add(getTareas().get(i).getVO());
		}
		cocinaVO.setTareas(tareasVO);
		return cocinaVO;
	}

	@Override
	public String toString() {
		return "Cocina [tiempoSemielaborado=" + tiempoSemielaborado
				+ ", tareas=" + tareas + super.toString() + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((tareas == null) ? 0 : tareas.hashCode());
		result = prime * result + tiempoSemielaborado;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cocina other = (Cocina) obj;
		if (tareas == null) {
			if (other.tareas != null)
				return false;
		} else if (!tareas.equals(other.tareas))
			return false;
		if (tiempoSemielaborado != other.tiempoSemielaborado)
			return false;
		return true;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
}
